package com.macro.mall.service.impl;


import com.github.pagehelper.PageHelper;
import com.macro.mall.common.api.ResultCode;
import com.macro.mall.common.exception.Asserts;
import com.macro.mall.mapper.CurCourseTypeMapper;
import com.macro.mall.model.CurCourseType;
import com.macro.mall.model.TypeLevel;
import com.macro.mall.service.CurCourseTypeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Service
public class CurCourseTypeServiceImpl implements CurCourseTypeService {

    @Autowired
    private CurCourseTypeMapper curCourseTypeMapper;

    /**
     * 保存
     * 所有字段全都保存
     *
     * @param curCourseType
     * @return 保存后的对象包括ID
     */
    @Override
    public int saveCurCourseType(CurCourseType curCourseType) {
        /**if(curCourseType.getId()==null||curCourseType.getId()==""){
         *      String uuid =UUID.randomUUID().toString().replace("-", "").trim();
         *     curCourseType.setId(uuid);
         */
        return curCourseTypeMapper.saveCurCourseType(curCourseType);
    }

    /**
     * 保存
     * 判断为空保存
     *
     * @param curCourseType
     * @return 保存后的对象包括ID
     */
    @Override
    public int saveCurCourseTypeSelective(CurCourseType curCourseType) {
        /**if(curCourseType.getId()==null||curCourseType.getId()==""){
         *      String uuid =UUID.randomUUID().toString().replace("-", "").trim();
         *     curCourseType.setId(uuid);
         */
        try {
            return curCourseTypeMapper.saveCurCourseTypeSelective(curCourseType);
        } catch (Exception e) {
            log.error("", e);
            Asserts.fail(ResultCode.FAILED);
        }
        return 0;
    }

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    @Override
    public int deleteCurCourseTypeById(String id) {

        return curCourseTypeMapper.deleteCurCourseTypeById(id);
    }

    /**
     * 更新
     * 更新所有字段
     *
     * @param curCourseType
     * @return 保存后的对象包括ID
     */
    @Override
    public int updateCurCourseType(CurCourseType curCourseType) {

        return curCourseTypeMapper.updateCurCourseType(curCourseType);
    }

    /**
     * 更新
     * 判断为空保存更新字段
     *
     * @param curCourseType
     * @return 保存后的对象包括ID
     */
    @Override
    public int updateCurCourseTypeSelective(CurCourseType curCourseType) {

        return curCourseTypeMapper.updateCurCourseTypeSelective(curCourseType);
    }

    /**
     * 按ID查询
     *
     * @return CurCourseType
     * @parm id 主键ID
     */
    @Override
    public CurCourseType selectCurCourseTypeById(String id) {

        return curCourseTypeMapper.selectCurCourseTypeById(id);
    }


    /**
     * 按条件查询全部的
     *
     * @param parentId 查询条件
     * @return List<CurCourseType>
     */
    @Override
    public List<CurCourseType> selectAllByCurCourseType(String parentId,String busiCategory, Integer pageSize, Integer pageNum) {
        try {
            CurCourseType curCourseType = new CurCourseType();
            if (parentId != null) {
                curCourseType.setParentId(Integer.parseInt(parentId));
            }
            if (busiCategory != null) {
                curCourseType.setBusiCategory(busiCategory);
            }
            PageHelper.startPage(pageNum, pageSize);
            List<CurCourseType> curCourseTypes = curCourseTypeMapper.selectAllByCurCourseType(curCourseType);
            Map<String, String> map = toMap(curCourseTypeMapper.selectLevel());
            for (CurCourseType one : curCourseTypes) {
                one.setLevel(map.get(String.valueOf(one.getId())));
                if (one.getSubset().size() != 0) {
                    List<CurCourseType> subset = one.getSubset();
                    for (CurCourseType two : subset) {
                        two.setLevel(map.get(String.valueOf(two.getId())));
                        if (two.getSubset().size() != 0) {
                            List<CurCourseType> subset2 = two.getSubset();
                            for (CurCourseType three : subset2) {
                                three.setLevel(map.get(String.valueOf(three.getId())));
                            }
                        }
                    }
                }
            }
            return curCourseTypes;
        } catch (Exception e) {
            log.error("", e);
            Asserts.fail(ResultCode.FAILED);
        }
        return new ArrayList();
    }

    @Override
    public List<CurCourseType> selectAllByDeptId(String deptId, Integer pageSize, Integer pageNum) {
        List<CurCourseType> curCourseTypes = null;
        try {
            PageHelper.startPage(pageNum, pageSize);
            curCourseTypes = curCourseTypeMapper.selectAllByDeptId(deptId);
        } catch (Exception e) {
            log.error("error",e);
            Asserts.fail(ResultCode.FAILED);
        }
        return curCourseTypes;
    }


    private Map<String, String> toMap(List<TypeLevel> list) {
        Map<String, String> maps = new HashMap<>();
        for (TypeLevel lvl : list) {
            maps.put(lvl.getId(), getChLevel(lvl.getLevel()));
        }
        return maps;
    }

    private String getChLevel(String le) {
        switch (le) {
            case "1.0":
                return "一级";
            case "2.0":
                return "二级";
            case "3.0":
                return "三级";
            default:
                return "一级";
        }
    }


}